package tianhao.luo.hashtab;

/**
 * 哈希表
 *
 * @author: tianhao.luo@hand-china.com 2021/6/21  下午11:00
 */
public class HashTab {

    private EmpLinkedList[] empLinkedListArray;
    private int size;

    public HashTab(int size){
        this.size = size;
        // 初始化empLinkedListArray
        empLinkedListArray = new EmpLinkedList[size];
        // 注意需要初始化每一条链表
        for (int i = 0; i < size; i++) {
            empLinkedListArray[i] = new EmpLinkedList();
        }
    }

    /**
     * 添加雇员
     * @param emp 待添加元素
     */
    public void add(Emp emp){
        // 根据员工id,得到该员工应当添加到哪条链表
        int empLinkedListNo = hashFun(emp.id);
        // 将emp添加到对应的链表中
        empLinkedListArray[empLinkedListNo].add(emp);
    }

    /**
     * 简单取模法
     * @param id 员工id
     * @return 数组索引
     */
    private int hashFun(int id){
        return id % size;
    }


    /**
     * 获取链表中所有的元素
     * 遍历hash表
     */
    public void list(){
        for (int i = 0; i < size; i++) {
            empLinkedListArray[i].list(i);
        }
    }

    /**
     * 根据id查找元素
     * @param id id
     * @return 查找到的员工
     */
   public Emp findEmpById(int id){
       int i = hashFun(id);
       Emp emp = empLinkedListArray[i].findEmpByList(id);
       if (emp != null){
           System.out.println("在第"+(i+1)+"条链表中找到了");
       }else{
           System.out.println("在哈希表中,没有找到该雇员~");
       }
       return emp;
   }

    /**
     * 根据id删除链表中的元素
     * @param id 员工id
     * @return 删除的元素
     */
   public Emp delete(int id){
       int i = hashFun(id);
       Emp delete = empLinkedListArray[i].delete(id);
       return delete;
   }
}
